package com.zang.greedy;

/**
 * @author ZVerify
 * @since 2022/11/22 14:16
 * @see <a href="https://leetcode.cn/problems/gas-station/">...</a>
 **/
public class 加油站 {
    // 局部最优求全局最优
    public int canCompleteCircuit(int[] gas, int[] cost) {
        // 区域的剩余油量计算
        int curSum = 0;
        // 整体的剩余油量计算
        int totalSum = 0;
        //  当前的起点
        int index = 0;
        for (int i = 0; i < gas.length; i++) {
            // 更新区域的剩余油量
            curSum += gas[i] - cost[i];
            // 更新整体的剩余油量
            totalSum += gas[i] - cost[i];
            // 当我们范围内的油量不够的话清空，以下一个节点为起始点
            if (curSum < 0) {
                index = (i + 1) % gas.length ;
                curSum = 0;
            }
        }
        // 如果整体的剩余油量为空的话那么肯定不够一圈的
        if (totalSum < 0) return -1;
        return index;
    }
}
